package com.study.spark.scala.chapter06

object Scala08_Object_Instance_1 {
  def main(args: Array[String]): Unit = {
    // TODO Scala中马丁将构造方法分为了两大类：主构造方法和辅助构造方法
    //
    // 用于完成类的初始化操作的的构造方法就是主构造方法
    // 其他构造方法就是辅助构造方法，名字就是this关键字,其他和普通方法一样
    // 辅助方法调用之前应该先调用主构造方法完成类的初始化
    // 辅助构造方法可以重载，并且相互调用

    // 如果主构造方法参数列表传入了参数，就不会走辅助构造方法，直接使用主构造方法初始化
//    val u1 = new User("zhangsan")
    /*
aaa
name: zhangsan
     */
    // 但是如果主构造方法参数列表没有传入参数，就走辅助构造方法
    // 辅助构造方法首先也会调用主构造方法初始化，再执行自己逻辑
//    val u2 = new User()
    /*
aaa
name: zhangsan
bbb
     */

    // 辅助构造方法可以重载，之间也能相互调用，但是调用的构造方法必须提前声明
//    val u3 = new User(20)
    /*
aaa
name: zhangsan
bbb
ccc
     */


  }
  class User(name : String){
    println("aaa")
    println("name: "+name)
    def this(){
      this("zhangsan")
      println("bbb")
    }

    def this(age : Int){
      this()
      println("ccc")
    }
  }
}



